#ifndef __BOARDInit_C
#define __BOARDInit_C

#include "BoardInit.h"

void Board_init(){
    //RTC初始化
		#if RTC_ON > 0
		RTC_init();
		#endif
	
	  // 优先级配置：抢占=3位;sub优先级=1位。
	  NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_3);
	
	  #if using_uart1 > 0
	  #if uart1_DMA_send > 0
	  UART1_TX_DMA_Init();
	  #endif
	  uart_init();
	  #endif
	  #if using_uart2 > 0
	  #if uart2_DMA_send > 0
	  UART2_TX_DMA_Init();
	  #endif
		uart2_init();
	  #endif
	  #if using_uart3 > 0
	  #if uart3_DMA_send > 0
	  UART3_TX_DMA_Init();
	  #endif
		uart3_init();
	  #endif
	  #if using_uart4 > 0
	  #if uart4_DMA_send > 0
	  UART4_TX_DMA_Init();
	  #endif
		uart4_init();
	  #endif
	  #if using_uart5 > 0
		uart5_init();
		#endif
	
	  led_init();
	  Rly_init();
		
		#if BleWifi_type == BleWifi_Ai_WB2
		ledWifi_init_output();
		#endif
		
	  #if beep_type == beep_APM || beep_type == beep_BPM
	  buzzer_init();
	  #endif
	  
	  #if PinPick_RatedI > 0
	  PinPick_init();
	  #endif
		
		#if Key1  > 0
	  key_init();	 
    #endif	
		
	  leakageDetect_init();
		
		#if PE_ON > 0
	  PE_Detect_init();
		#endif
		
		#if CarD1_Protect > 0
	  carD1_Detect_init();
		#endif
	  PWM_Pin_init();
	
	  DMA_Init();
		#if ADC_num > 2 && (defined TEMP2_ADC_Chn || defined TEMP3_ADC_Chn)
		DMA2_ADC3_Init();
		#endif
		
		
	  #if UI_Meter_Method == Meter_SelfADC 
	  ADC_ChgUI_Init(); 
	  #endif
	  ADC_CP_Init(); 
	  ADC_TEMP_Init();    
	  ADC_Init();
		#if ADC_num > 1
		ADC2_Init();
		#endif
		#if ADC_num > 2 && (defined TEMP2_ADC_Chn || defined TEMP3_ADC_Chn)
		ADC3_Init();
		#endif

		// 全局时钟初始化
		#if RTC_ON == 0 || CP_CarD1_Trigger_Mode == CP_CarD1_Trigger_TMRDelay 
    Tmr_CLOCK_init();   
		#endif
		
	  #ifndef UsingFreeRTOS  
	  Tmr_Task_init();
	  #endif
		#if RlyPin_Ctrl_PWM_EN > 0
		#if defined SQDri_EVSEB_7KW || defined SQDri_EVSEB_11KW
    Tmr_Relay_init();
		#endif
    #endif		
		#if UI_Meter_Method == Meter_SelfADC || CP_Mode == CP_Mode_sta
	  Tmr_ADC_init();
		#endif
	  Tmr_PWM_init();
		
		#ifndef UsingFreeRTOS
		#if Using_UART_LCD == LCD_0P42_IIC
		// SSD1306 初始化
		IIC_Pin_init();
	  I2C_TX_DMA_Init();
	  IIC_init();
    oled_reset_Pin_init();		
    ssd1306_init();	
		#endif
		
		#if Upboard_IIC == 1
		// SSD1306 初始化
		IIC_Pin_init();
	  I2C_TX_DMA_Init();
	  IIC_init();
		#endif
		
		#endif
		
		// SPI初始化
		#if (UI_Meter_Method == Meter_GuageIC_RN8209) || (UI_Meter_Method == Meter_GuageIC_RN8302B)
		rn_zero_init();
    SPI_Gauge_init();
    #endif	
		
		#if card_type_sel > 0
		#ifdef CardSPI_RST_PinId
		CardSPI_RST_init();
		#endif
		CardSPI_init(); 
    RC522_init();
    #endif		
		
		#if finger_sensor_type > 0 
		zw101_pin_init();
		#endif
		
		flash_rw_init();
		
		#if Nor_Flash > 0
		SPI_NorFlash_init();
		#endif
	  
    // 用户数据初始化	
	  data_init();
	  		
		// 系统启动后，读取flash数据；
		flash_read();		
		assign_flash_data();
		
		#if LOG_ON > 0
		// 读取log数据
		flash_log_read();
    #endif		
				
    printf("  Board_init end  \r\n");		
}

#endif


